home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / util / gnu / gawk_2_15_5.lha / gawk-2.15.5 / awk.ych < prev    next >
Text File  |  1995-01-20  |  2KB  |  122 lines

  1. Changes for AWK.Y by Andreas Scherer, January 20, 1995.
  2.  
  3. @x l.31
  4. #include "awk.h"
  5. @y
  6. #include "ansiawk.h"
  7. @z
  8.  
  9. @x l.33
  10. static void yyerror (); /* va_alist */
  11. @y
  12. static void yyerror (char *,...);
  13. @z
  14.  
  15. @x l.848
  16. yyerror(va_alist)
  17. va_dcl
  18. {
  19.     va_list args;
  20.     const char *mesg = NULL;
  21.     register char *bp, *cp;
  22.     char *scan;
  23.     char buf[120];
  24.     static char end_of_file_line[] = "(END OF FILE)";
  25.  
  26.     errcount++;
  27.     /* Find the current line in the input file */
  28.     if (lexptr && lexeme) {
  29.         if (!thisline) {
  30.             cp = lexeme;
  31.             if (*cp == '\n') {
  32.                 cp--;
  33.                 mesg = "unexpected newline";
  34.             }
  35.             for ( ; cp != lexptr_begin && *cp != '\n'; --cp)
  36.                 continue;
  37.             if (*cp == '\n')
  38.                 cp++;
  39.             thisline = cp;
  40.         }
  41.         /* NL isn't guaranteed */
  42.         bp = lexeme;
  43.         while (bp < lexend && *bp && *bp != '\n')
  44.             bp++;
  45.     } else {
  46.         thisline = end_of_file_line;
  47.         bp = thisline + strlen(thisline);
  48.     }
  49.     msg("%.*s", (int) (bp - thisline), thisline);
  50.     bp = buf;
  51.     cp = buf + sizeof(buf) - 24;    /* 24 more than longest msg. input */
  52.     if (lexptr) {
  53.         scan = thisline;
  54.         while (bp < cp && scan < lexeme)
  55.             if (*scan++ == '\t')
  56.                 *bp++ = '\t';
  57.             else
  58.                 *bp++ = ' ';
  59.         *bp++ = '^';
  60.         *bp++ = ' ';
  61.     }
  62.     va_start(args);
  63.     if (mesg == NULL)
  64.         mesg = va_arg(args, char *);
  65.     strcpy(bp, mesg);
  66.     err("", buf, args);
  67.     va_end(args);
  68.     exit(2);
  69. }
  70. @y
  71. yyerror(char *mesg,...)
  72. {
  73.     va_list args;
  74.     register char *bp, *cp;
  75.     char *scan;
  76.     char buf[120];
  77.     static char end_of_file_line[] = "(END OF FILE)";
  78.  
  79.     errcount++;
  80.     /* Find the current line in the input file */
  81.     if (lexptr && lexeme) {
  82.         if (!thisline) {
  83.             cp = lexeme;
  84.             if (*cp == '\n') {
  85.                 cp--;
  86.                 mesg = "unexpected newline";
  87.             }
  88.             for ( ; cp != lexptr_begin && *cp != '\n'; --cp)
  89.                 continue;
  90.             if (*cp == '\n')
  91.                 cp++;
  92.             thisline = cp;
  93.         }
  94.         /* NL isn't guaranteed */
  95.         bp = lexeme;
  96.         while (bp < lexend && *bp && *bp != '\n')
  97.             bp++;
  98.     } else {
  99.         thisline = end_of_file_line;
  100.         bp = thisline + strlen(thisline);
  101.     }
  102.     msg("%.*s", (int) (bp - thisline), thisline);
  103.     bp = buf;
  104.     cp = buf + sizeof(buf) - 24;    /* 24 more than longest msg. input */
  105.     if (lexptr) {
  106.         scan = thisline;
  107.         while (bp < cp && scan < lexeme)
  108.             if (*scan++ == '\t')
  109.                 *bp++ = '\t';
  110.             else
  111.                 *bp++ = ' ';
  112.         *bp++ = '^';
  113.         *bp++ = ' ';
  114.     }
  115.     va_start(args,mesg);
  116.     strcpy(bp, mesg);
  117.     err("", buf, args);
  118.     va_end(args);
  119.     exit(2);
  120. }
  121. @z
  122.